package com.lollipop.programming.checkproblem;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author Lollipop
 * @Version 1.0
 * @Date 2025/4/28 9:07
 * @Description 线上CPU占用过高100%模拟程序 - 排查问题
 */
@Slf4j
public class CPUDemo {
    /**
     * 主函数，模拟CPU占用过高
     * <p>
     * 解决CPU占用过高问题的步骤：
     * 1. 查看进程ID（PID）：使用命令 `ps -ef | grep java` 查看Java进程的PID。
     * 2. 查看进程的CPU占用情况：使用命令 `top -p <PID>` 查看指定进程的CPU占用情况。
     * 3. 查看进程的线程信息：使用命令 `top -Hp <PID>` 查看指定进程的线程信息。
     * 4. 查看线程的堆栈信息：使用命令 `jstack <PID>` 查看指定进程的线程堆栈信息。
     * 5. 分析堆栈信息：根据堆栈信息分析CPU占用过高的原因。
     * 6. 优化代码：根据分析结果，优化代码，减少CPU占用。
     * 7. 重启服务：使优化后的代码生效。
     *
     * @param args
     */
    public static void main(String[] args) {
        // 模拟CPU占用过高
        while (true) {
            // 模拟长时间的计算任务
            for (int i = 0; i < 1000000; i++) {
                // 模拟计算任务
                int a = 1;
                // CPU占用过高
                int c = a + i;
                log.info("{}", c);
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                log.error("线程中断异常：{}", e.getMessage());
                // 恢复中断状态
                Thread.currentThread().interrupt();
            }
        }
    }
}
